const express = require('express')
const serverless = require('serverless-http')

// 在非Serverless环境下优先加载环境变量
if (process.env.SERVERLESS !== 'true') {
  require('dotenv').config()
}

const routes = require('./routes')
const path = require('path')
const PortManager = require('./utils/portManager')

const app = express()

// 添加静态文件服务中间件
app.use(express.static(path.join(__dirname, 'public')))

// 添加请求体解析中间件
app.use(express.json())
app.use(express.urlencoded({ extended: true }))

// 注册路由
app.use('/', routes)

// 添加错误处理中间件
app.use((err, req, res, next) => {
  // 记录详细的错误信息
  console.error('Error details:', {
    message: err.message,
    stack: err.stack,
    path: req.path,
    method: req.method,
    body: req.body,
    file: req.file
  })
  res.status(500).json({ error: err.message || '服务器内部错误' })
})

// 处理404错误
app.use((req, res) => {
  res.status(404).json({ error: '请求的资源不存在' })
})

// 本地开发环境直接启动应用
if (process.env.SERVERLESS !== 'true') {
  const port = 9000;
  (async () => {
    try {
      const isAvailable = await PortManager.ensurePortAvailable(port);
      if (!isAvailable) {
        console.error(`无法启动服务：端口 ${port} 无法释放`);
        process.exit(1);
      }
      app.listen(port, () => {
        console.log(`Server start on http://localhost:${port}`);
      });
    } catch (error) {
      console.error('服务启动失败:', error);
      process.exit(1);
    }
  })();
}

// 云函数模式导出handler
module.exports.handler = serverless(app)